home *** CD-ROM | disk | FTP | other *** search
/ PCMania 64 / PCMania CD64_1.iso / phy / phy003 / files / articulo.t21 < prev    next >
Encoding:
Text File  |  1997-04-11  |  7.6 KB  |  182 lines

  1. ε                             PROGRAMACIO 3D π
  2.  
  3.  Hola! me llamo Skynet y en principio, voy a comenzar una especie de curso de
  4. scene (ver articulo de demoscene) donde voy a explicar las bases y los funda-
  5. mentos de la programacion 3D. Este apartado puede que sea mas adelante expli-
  6. cado por NaviDJ o Lyjak si tubieran esa intencion...
  7.  
  8.  La programacion 3D es importante...es bonita...es la ostia...Bueno, pero todo
  9. eso cada uno lo sabe, aqui vamos a lo PURO Y DURO: Programacion 3D.
  10.  
  11.  Antes de seguir, hemos de decir que utilizaremos la libreria Graph 2.0 y la
  12. razon es que ademas de ser gratis, tiene la mayoria de ordenes que utilizaremos
  13. y ademas, al estar en ASM, esto nos liberara de la carga de aprender ASM y nos
  14. sera un factor para incrementar la velocidad. En caso de que no funcione podeis
  15. tener un "Hot line" con su autor. {8-#
  16. La libreria que mas utilizare es la de PASCAL. Y como tengo algo de experiencia
  17. en el uso, os dire que el archivo que os pide la TPU "GRFLIB.OBJ" debereis
  18. especificarlo en el archivo GRFLIB.PAS, Este ya esta especificado con la forma
  19. {$L path\GRFLIB.OBJ} y debereis habilitar el path, donde hayais gravado la li-
  20. breria. Despues compilais la unidad a disco y la copiais en el directorio TPU
  21. del pascal (UNITS o TPU por defecto).
  22.  Despues en cada programa que querais incorporarla, solo tendreis que escribir
  23.  Uses xxx,xxx,Grflib;
  24.  
  25. LET'S GO WITH 3D!!!
  26.  
  27.  En principio, nos damos cuenta que el monitor solo tiene pantalla 2D, aqui
  28. esta el principal problema! :) Por tanto, utilizando algoritmos adecuados po-
  29. dremos suplir esa carencia.
  30. Como crear un punto es facil: PONPIXEL(X,Y,COLOR,PANTALLA) (O fPONPIXEL)
  31.               X-> Coordenada X de 0 a 65536 (Word)
  32.               Y-> Coordenada Y de 0 a 65536 (Word)
  33.               Color -> Color del punto de 0 a 255 (Byte)
  34.               PANTALLA -> de 0 a 255 (Byte) La pantalla es el lugar donde
  35.      dibujaremos el pixel, si PANTALLA=0 entonces la mostrara en pantalla, pero
  36.      si PANTALLA es asignacion de la orden CREAVIRTUAL.
  37.      .
  38.      PANTALLA:=CREAVIRTUAL; (* Asigna memoria para la creacion de una pantalla
  39.      .                        virtual que tendra su propio codigo devuelto en
  40.      .                        la variable pantalla *)
  41.  
  42. Lo "dificil" sera pasar un punto (X,Y,Z) a (X',Y'), pues la forma de transformar
  43. es muy facil, ademas de incorporar una variable llamada "D" (Distancia) que
  44. sera la distancia respecto a nosotros:
  45.  
  46.    X_2D:=(D*X_3D)/Z_3D;
  47.    Y_2D:=(D*Y_3D)/Z_3D;
  48.  
  49. Mi experiencia personal me ha enseñado que esto es bastante inutil con el uso
  50. de las matrices, ya que si realizo las operaciones con matrizes 3D el dibujo
  51. con X e Y es similar al de la tranformacion 3D. Pero no lo es en el uso de
  52. camaras 3D dirigidas o rotaciones de camaras.
  53.  
  54. EJEMPLO DE USO: Archivo Stars.Pas  (Es el tipico ejemplo...lo siento..)
  55.  
  56. Una vez sabemos representar un punto en tres dimensiones en la pantalla, lo
  57. siguiente es saber modificarlo, ya que los puntos en 3D nos pueden servir como
  58. el esqueleto de vertices de un objeto complejo.
  59.  Las modificaciones basicas que se pueden hacer son las siguientes:
  60.  
  61.    * Rotacion en uno de sus ejes de la estructura de puntos
  62.    * Rotacion multiple de sus ejes
  63.    * Transladar el objeto
  64.    * Escalar el objeto
  65.    * Invertirlo
  66.  
  67.  Para cada opcion, existen algunas operaciones con matrices que realizan la
  68. operacion deseada. Estas matrices son correctas y podeis consultar mas sobre
  69. este tipo de matematicas en libros de geometria analitica, algebra lineal,
  70. trigonometria y similares...( APRENDEDLO SOLO SI OS GUSTA!!! ya que el estudio
  71. obligado, es el peor castigo :)  )
  72.  
  73. Como deciamos, no vamos a demostrar el porque de esos resultados, solo mostra-
  74. remos la formula de las matrices, ya que su implementacion es muy facil ademas
  75. de ser muy rapida.
  76.  
  77. Translacion: (sintaxis del mathlab)
  78. [1 0 0 0;
  79.  0 1 0 0;   Donde a=-p(cos(q)*sin(w))  i donde p=Raiz(x^2+y^2+z^2)
  80.  0 0 1 0;         b=-p(sin(q)*sin(w))          q=arctan(x/y)
  81.  a b c 1]         c=-p(cos(w))                 w=arccos(z/p)
  82.  
  83.  FANTASTICO!! Con solo una operacion, obtenemos una translacion con cordenadas
  84. esfericas, donde solo tendremos que introducir los datos.
  85.  
  86. Rotacion:
  87. Eje Y:
  88. [ a 0 b;  Donde a=cos(Angulo de rotacion Y)
  89.   0 1 0;        b=sin(Angulo de rotacion Y)
  90.  -b 0 a]
  91.  
  92. Eje Z:
  93. [ 1  0  0;  Donde a=cos(Angulo de rotacion Z)
  94.   0  a -b;        b=sin(Angulo de rotacion Z)
  95.   0  b  a]
  96.  
  97. Eje X:
  98. [ a -b  0;  Donde a=cos(Angulo de rotacion X)
  99.   b  a  0;        b=sin(Angulo de rotacion Y)
  100.   0  0  1]
  101.  
  102. Una vez tenemos las principales herramientas 3D, unicamente falta aplicarlas
  103. y como todos estais en la UNIVERSIDAD, se supone que sabreis despejarlas, para
  104. obtener la rotacion...
  105. QUE NO SABEIS???!??!!?!?!??   ;-)  Luego dicen que la selectividad es dura...
  106.  
  107. En uno de los programas realizados, la rotacion la he implementadp con los
  108. seguientes procedimientos. Para reutilitzarlos, unicamente, deberas canviar
  109. la estructura de los parametros del procedure...
  110.  
  111. COST =0.999847695156391239157;  {Para acelerar el calculo}
  112. SINT =0.017452406437283512819;
  113.  
  114. Procedure Rotx(var Dades:Array of TresD);
  115.    Var i : integer;
  116.    Begin
  117.      for i := 0 to MAXVERTEX do
  118.        begin
  119.          dades[i].y := dades[i].y * COST + dades[i].z * SINT;
  120.          dades[i].z :=-dades[i].y * SINT + dades[i].z * COST;
  121.        end;
  122.    End;
  123.  
  124. Procedure Roty(var dades:Array of TresD);
  125.    Var i : integer;
  126.    Begin
  127.      For i := 0 to MAXVERTEX do
  128.        Begin
  129.          dades[i].x := dades[i].x * COST - dades[i].z * SINT;
  130.          dades[i].z := dades[i].x * SINT + dades[i].z * COST;
  131.        End;
  132.    End;
  133.  
  134. Procedure Rotz(var dades:Array of TresD);
  135.    Var i : integer;
  136.    Begin
  137.       For i := 0 to MAXVERTEX do
  138.         Begin
  139.            dades[i].x := dades[i].x * COST + dades[i].y * SINT;
  140.            dades[i].y :=-dades[i].x * SINT + dades[i].y * COST;
  141.         End;
  142.    End;
  143.  
  144. EJEMPLO SKYNET.PAS  Como veis, este sencillo programa daria el pego en una
  145. rutina algo mejorada, con texturas y demas... Lo importante de este ejemplo
  146. es el motor...
  147.  
  148.  
  149. RECORDAD LAS NORMAS PRINCIPALES DE PROGRAMACION GRAFICA:
  150.  
  151. - No calculeis mas cosas de las que hacen falta
  152. - No hagais 40000 la misma operacion, guardadla
  153. - Podeis intentar hacer tablas de cosenos prediseñadas
  154. - No calculeis todos los poligonos con textura, solo los que se ven
  155. - Coged atajos de programacion
  156. - Pegadle mucho a vuestro hermano
  157. - y por ultimo...pero la mas triste:
  158.    en la programacion de demos aun no hay lugar para las chicas  :_(
  159.  
  160.  
  161.  
  162. Una vez sabemos representar y modificar vertices en el espacio podemos hacer
  163. muchisimas cosas, asi que os dejo de tiempo hasta la proxima Phymosys Magazine
  164. para que apliqueis estos conceptos basicos...lo que viene si que es bueno!:
  165.   - Poligonos, Texturas, Plasma, Pantallas Virtuales, archivos graficos,
  166.   efector, y un sinfin de conceptos que aprender.... Nos vemos...
  167.  
  168. Si alguien tiene interes en intercanviar rutinas graficas, codigos fuente,
  169. utilidades y demas relacionado con la demoscene:
  170.                         amarfer@alufis34.ffisic.uv.es
  171.  
  172. Por cierto, os dejo una beta del nuevo conversor de imagenes del 3D Studio que
  173. estoy haciendo...como no esta terminado, no incorporo el codigo fuente. Si a
  174. alguno le interesa, ya sabe mi direccion...
  175. ==============================================================================
  176. RECOMIENDO: Sites de Grupos de demoscene...por ejemplo BLASTERSOUND, Graph 2.0
  177. y "Lenguaje Ensamblador y programacion de compatibles" de Prentice Hall
  178. ademas de todas las NEWS de demoscene. 
  179. PROXIMO: Incorporacion de musica a demos, pantallas virtuales y poligonos.
  180.  
  181.  
  182.